package com.ybbase.framework.service.system;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ybbase.framework.model.po.system.OrganUser;
import com.ybbase.framework.model.po.system.Role;
import com.ybbase.framework.model.po.system.User;

import java.util.List;

/**
 * <p>
 * 系统用户表 服务类
 * </p>
 *
 * @author cg
 * @since 2019-11-26
 */
public interface UserService extends IService<User> {

    /**
     * 生成用户JwtToken
     *
     * @param userId 用户编码
     * @return String
     * @author cg
     * @date 2019-11-26 16:18
     * @since cloud2.0
     */
    String generateJwtToken(Integer userId);

    /**
     * 根据登录名称获取用户信息
     *
     * @param loginName 登录名称
     * @return User
     * @author cg
     * @date 2019-11-27 11:49
     * @since cloud2.0
     */
    User getUserByLoginName(String loginName);

    /**
     * 获取用户全部信息
     *
     * @param userId 用户编码
     * @return User
     * @author cg
     * @date 2019-11-28 10:25
     * @since cloud2.0
     */
    User getUserAllInfo(Integer userId);

    /**
     * 根据用户Id获取用户组织机构
     *
     * @param userId 用户编码
     * @return List<OrganUser>
     * @author cg
     * @date 2019-11-28 16:44
     * @since cloud2.0
     */
    List<OrganUser> getOrganUserList(Integer userId);

    /**
     * 根据用户Id获取用户组织机构
     *
     * @param userId  用户编码
     * @param organId 组织机构编码
     * @return List<OrganUser>
     * @author cg
     * @date 2019-11-28 16:44
     * @since cloud2.0
     */
    List<OrganUser> getOrganUserList(Integer userId, Integer organId);

    /**
     * 保存用户角色
     *
     * @param userId  用户编码
     * @param roleIds 角色编码
     * @author cg
     * @date 2019-11-28 10:47
     * @since cloud2.0
     */
    void saveUserRole(Integer userId, List<Role> roleIds);

    /**
     * 保存用户信息
     *
     * @param user 用户信息
     * @author cg
     * @date 2019-11-28 17:37
     * @since cloud2.0
     */
    void saveUser(User user);

    /**
     * 保存用户机构和岗位信息
     *
     * @param organId 组织机构编码
     * @param userId  用户编码
     * @author cg
     * @date 2019-11-28 16:16
     * @since cloud2.0
     */
    void saveUserOrgan(Integer organId, Integer userId);

    /**
     * 删除用户的组织机构关联
     *
     * @param userId  用户编码
     * @param organId 组织机构编码
     * @author cg
     * @date 2019-11-28 16:31
     * @since cloud2.0
     */
    void deleteUserOrgan(Integer userId, Integer organId);

    /**
     * 根据组织机构获取用户列表
     *
     * @param
     * @return
     * @author cg
     * @date 2020-01-11 12:07
     * @since cloud2.0
     */
    List<User> getUserListByOrgId(String organId);

    /**
     * 根据角色ID获取下面所有的用户
     *
     * @param pageIndex
     * @param step
     * @param id
     * @return
     * @date 2020年3月2日12:23:10
     * @author phm
     */
    IPage<User> getUserByRoleId(IPage<User> page, QueryWrapper<User> queryWrapper, Integer[] id, String name);

    /**
     * 根据用户ID获取相关数据
     * @param userId 用户编码
     * @return
     * @author cg
     * @date 2020-03-29 17:58
     * @since cloud2.0
     */
    User getScopeById(int userId);
}
